7-4. 2点間接続の実際 '96〜 (1) Point-to-Point 接続の基本 * 基本的なこと 2点間接続の実質的なプロトコルは PPP( Point-to-Point )であると言ってよい。似たよ うなプロトコルに SLIP( Serial Line Ineternet Protocal )というのもある。SLIP の方 はだいぶ昔からあり、それなりに使われてきた。PPP は今でこそあたり前だが、本当ごく 最近になってようやく整備された。それまではインタ−ネットでは、 フリ−の PPP ソフ トや Morning Star 社などの市販ソフトを使っていたのである。注.Morning Star 社いつ の間にか雑誌にも出なくなり、聞かなくなってしまった。 PPP と SLIP の違いは、認証機能( PAP, CHAP ) やオンデマンド・ダイアルアップ機能が SLIP にはないことぐらいである。接続方法は RS-232C のシリアル・ポ−トにクロスケ− ブルでマシン同士を直結する方法。電話回線を介したモデムによる接続。更には専用線や ISDN回線によるル−タを使ったWAN接続がある。電話回線のモデム接続というのは、 いわゆるインタ−ネットにおけるダイアルアップIP接続で使われるやり方である。 ここでは2点間接続の仕組みを理解するため、簡単な例として "Apollo 2台による SLIP 接続" を示す。INDY の場合の PPP 接続を説明しようと思ったが、すでにダイアルアップ 接続を先に説明したので、ここで簡単に述べておく。 SLIP と同じく2点間用のIPアド レスとホスト名を決める。設定ファイルは /etc/ppp.conf に記述する。 モデム接続した ければ、/etc/inittab、/etc/uucp/Systems, Devices, Dialers も記述する。 local 側の /etc/ppp.conf ------------------------------------------------ |connectB remotehost=hostB lochost=hostA out remote 側は hostB, hostA |add_route netmask=255.255.255.0 を替えてout を in にする。 % /usr/etc/ppp -r connectB -------- -------- 電話回線 |ホスト|========|モデム|□----- モデムを介す場合は、ホストとモデム間の -------- -------- ケ−ブルはストレ−トケ−ブルを使うこと。 RS-232C ストレ−トケ−ブル * Apollo による SLIP 接続 [ 共通設定 ] 192.9.205.1 192.9.205.2 hostA と hostB を RS-232C クロスケ− ------- RS-232C ------- ブルで直結接続する。Apolloの RS-232C |hostA|================|hostB| ポ−トの最大通信速度は 19200 bpsであ ------- ------- る。RTS/CTS 制御に一応設定してみる。 | 192.9.200.1 | 192.9.201.1 ------*----- ----*--------- /etc/hosts --------------------- |127.0.0.1 localhost |192.9.205.1 slip1 |192.9.205.2 slip2 $ /etc/mkhosts /etc/hosts をやっておくこと。 $ tctl -speed 19200 -raw -noecho -nosync -noinsync -cts_enable -rts_enable [ hostA,B の設定 ] hostA $ /etc/ifconfig sl0 192.9.205.1 192.9.205.2 << root で実行すること。 hostA $ /etc/ifconfig sl0 << 設定状態を表示する。 sl0: flags=51 inet 192.9.205.1 --> 192.9.205.2 netmask ffffff00 hostA $ /usr/ucb/netstat -rn Destination Gateway Flags Hops Interface 192.9.200 192.9.200.2 U 0 eth0 192.9.205 192.9.205.1 U 0 ... sl0 hostB $ /etc/ifconfig sl0 192.9.205.2 192.9.205.1 [ 接続の確認 ] hostA $ telnet slip2 << telnet や ftp したいなら、相手ホストで inetd が動 Trying 192.9.205.2... いていること。 Connected to slip2. login: katou | hostB $ ld << ここから通常の telnet の操作ができる。 | telnet> quit << CTRL+] で抜ける。 << Apollo のリリ−ス・ノ−トから [ os.v.10.1__changes ] >> 2.8 TCP/IP Enhancements At SR10.1, several enhancements have been made to the Apollo TCP/IP implementation. They include support for the Serial Line Internet Protocol (SLIP) and improved subnetting support. We have also improved ftp ASCII mode file transfer performance by a factor of two. 2.8.1 SLIP Support The Serial Line Internet Protocol allows point-to-point connections over an RS232 serial line. To run TCP/IP over an RS232 line, define the node's RS232 interface with the ifconfig command using sl0 as the interface name, specify the network address of the local interface, then specify the address of the destination end point of the link. For example: /etc/ifconfig sl0 <__-_______> <____-_______> The Apollo TCP/IP SLIP implementation supports a single serial line, and it must use SIO 1 on nodes which have more than one serial line. * Apollo の CU コマンド [ UUCP と共通の制御ファイルの設定 ] /usr/lib.uucp/Systems 電話番号の 299 から右はどんな設定でも関係ない。 -------------------------------------------------------------------- |net Any ACU 19200 299 "" P_ZERO "" \r\c in:--in: uucp word: apollo /usr/lib.uucp/Devices ------------------------------ |ACU tty01 - 19200 telebit \D /usr/lib.uucp/Dialers -------------------------------------------------------------------------------- |telebit =,-, "" AT OK-AT A\pT\pS50=255\r\c OK\r A\pT\pS7=58\r\c OK\r A\pT\pDP \T\r CONNECT\sFAST [ コマンドのテスト ] $ /sys5.3/usr/bin/cu -d net << デバッグ・オプション -d を付けて起動してみた。 conn(net) Device Type ACU wanted << モデムや相手コンピュ−タとのやり取りが出る。 | device status for fd=6 F_GETFL=12,iflag=`12065',oflag=`0',cflag=`2276',lflag=`0',line=`0' cc[0]=`377',[1]=`377' , [2]=`10' , [3]=`30' , [4]=`1' , [5]=`1' , [6]=`0' , .. call _mode(1) Connected _receive started transmit started Domain/OS sr10 (ms1) (tty01) login: katou | All Rights Reserved. << 相手ノ−ドに入っている。 $ << 終了は "~" キ−を押して "." キ−を押す。 * リンク・コマンドの種類 2台のEWS同士を接続する方法を整理しておこう。ここでは Apollo コンピュ−タ独自 のコマンドも挙げておく。2点間接続するには、大別して RS-232Cによるダイレクト接続 とモデムを介した接続がある。昔から幾つかのコマンドがるが、あまり情報はない。 man とかリリ−ス・ドキュメントなど見て試していくしかない。しかし、だいたいにして動作 は不安定であり、ファイル転送は期待しない方が無難だろう。 UUCP : /usr/lib.uucp/uucico TIP : /bsd4.3/usr/bin/tip EMT : /com/emt CU : /sys5.3/usr/bin/cu SLIP : telnet, ftp EMT は Apollo 独自のコマンドで簡単に使える。しかしシリアル回線による、何か機器の 設定に使うにはよい。CU は UUCP の設定がそのまま使えるので、UUCP のリンク・テスト に用いるとよい。TIP も CU, EMT と似たようなコマンドだが、 /etc/remote ファイルに :el=^C^S^Q^U^D:ie という様な設定をする必要がある。 CU, TIP, EMT はファイル転送も 機能としてはあるが、あまり信頼性がないようである。 CU コマンドでの telnet 相当の 機能はまま使えると思う。NFS は負荷が大きいので、これらでは使用は無理である。 (2) ル−タによるISDN接続 ================================================================================ ル−タは Cisco 2503 を使い、ISDN回線はエミュレ−タ INE-64II を介して接続実験 をしてみた。エミュレ−タ装置は特にいじらずに買ってきたままの状態で設置した。ディ ップ・スイッチはすべて上向いた状態である。LINE 1,2 と 2503 のそれぞれの BRI ポ− トとを RJ45 のツイスト・ペア・ケ−ブルで接続した。ホスト、ル−タ、エミュレ−タを ちゃんと接続すると、INE-64II の赤いランプが L1 と D がつくはずである。B1 と B2は Bチャネルであり、pingコマンドなんかで相手にアクセスすればランプがついてくる。一 応ISDNエミュレ−タだから B1、B2 のランプがつく早さが接続する速度なのだろうが、 速い。2秒もかかっていない。B2 ランプはバルク転送の時にのみつくと思われる。 ================================================================================ * IPアドレス number で静的経路制御の場合 ------- |hostA| 192.9.200.2 % route add net 192.168.1 192.9.200.1 1 ------- % route add net 192.9.202 192.9.200.1 2 | -----*-------*------- | --------- 192.9.200.1 |router1| --------- 192.168.1.1 ■ : 0987654321 (ISDN番号) ISDN : : 0123456789 ■ --------- 192.168.1.2 |router2| --------- 192.9.202.1 | -----*-------*------- | ------- % route add net 192.168.1 192.9.202.1 1 |hostB| 192.9.202.2 % route add net 192.9.200 192.9.202.1 2 ------- [ router1 ル−タの設定 ] router1#write term Building configuration... Current configuration: ! version 11.0 service udp-small-servers service tcp-small-servers ! hostname router1 ! enable password henomohe ! username router1 password 7 045802150C2E username router2 password 7 070C285F4D06 no ip domain-lookup isdn switch-type ntt << nttはNTTのISDNのしるし。他の国 isdn tei-negotiation first-call のISDNは別な指定になる。 ! interface Ethernet0 ip address 192.9.200.1 255.255.255.0 << LAN側のIPアドレスです。 ip directed-broadcast -131073 << これは必要なのか?。 ! interface Serial0 << 2503 は専用線のシリアルインタ−フェ− | スがある。この2つは今は関係ない。 ! interface Serial1 | ! interface BRI0 ip address 192.168.1.1 255.255.255.0 << WAN側のIPアドレスです。 ip directed-broadcast -131073 encapsulation ppp << PPP を使うよ。 bandwidth 64 dialer idle-timeout 10000 ↓ 012.. は相手側の電話番号。 dialer map ip 192.168.1.2 name router2 0123456789 dialer-group 1 << グル−プ1番。dialer-list で使う。 ppp authentication chap << 認証に CHAP を使う。 ! router rip redistribute static << 経路情報を交換するよ。 network 192.168.1.0 ! << 静的経路を設定します。 ip route 192.9.202.0 255.255.255.0 192.168.1.2 access-list 101 permit ip any any ! dialer-list 1 list 101 << グル−プ1番、access-list 101 番。 ! line con 0 password cisco line aux 0 transport input all line vty 0 4 password cisco login ! end [ router2 ル−タの設定 ] router1 と違う部分のみ掲載 hostname router2 interface Ethernet0 ip address 192.9.202.1 255.255.255.0 interface BRI0 ip address 192.168.1.2 255.255.255.0 dialer map ip 192.168.1.1 name router1 0987654321 router rip redistribute static network 192.168.1.0 ip route 192.9.200.0 255.255.255.0 192.168.1.1 * IPアドレス number で動的とデフォルト経路制御の場合 hostA 側:hostA は routed、router1 も動的経路制御とする。 hostB 側:hostB は router2 へのデフォルト経路を設定する。 router2 は router1 へのデフォルト経路を設定する。 -------------------------------------------------------------------------------- 以下の設定ではおかしい部分が残る。router2 から他へアクセスしようとすると、できな い所がある。192.9.200.1 へは ping できても 192.9.200.2 へはできないとか。 あるい は 192.168.1.1 へは ping できても 192.168.1.2 へはできないとか。どうも挙動不審で ある。しかし hostA、B 間のアクセスは問題ないのでいいと言えばいいが。どうも変だ。 -------------------------------------------------------------------------------- ------- |hostA| 192.9.200.2 % routed & << root で実行する。 ------- | -----*-------*------- | --------- 192.9.200.1 |router1| (動的経路制御) --------- 192.168.1.1 ■ : ISDN : ■ --------- 192.168.1.2 |router2| (router1 へのデフォルト経路) --------- 192.9.202.1 | -----*-------*------- | ------- % route add default 192.9.202.1 1 |hostB| 192.9.202.2 ------- [ router1 ル−タの設定 ] router1#write term | interface Ethernet0 ip address 192.9.200.1 255.255.255.0 interface BRI0 ip address 192.168.1.1 255.255.255.0 dialer idle-timeout 5 << 5秒間、相手に何もパケットを送ってい dialer string 0123456789 なければISDN接続を切る。 router rip redistribute static network 192.9.200.0 << network 192.168.1.0 は入れてはダメ!。 ! 30秒毎に経路を相手に送ってしまう。 ip route 192.9.202.0 255.255.255.0 192.168.1.2 [ router2 ル−タの設定 ] router2#write term | interface Ethernet0 ip address 192.9.202.1 255.255.255.0 interface BRI0 ip address 192.168.1.2 255.255.255.0 dialer string 0987654321 << これでも電話して接続する。 ip route 0.0.0.0 0.0.0.0 192.168.1.1 << デフォルトル−トの設定。 この指示の仕方でないとダメ。 router2#show ip route Gateway of last resort is 192.168.1.1 to network 0.0.0.0 C 192.9.202.0 is directly connected, Ethernet0 C 192.168.1.0 is directly connected, BRI0 S* 0.0.0.0 0.0.0.0 [1/0] via 192.168.1.1 $ /usr/ucb/netstat -rn Destination Gateway Flags Hops ... Interface 192.9.202.1 USG 1 eth0 192.9.202 192.9.202.2 U 0 eth0 (3) INDY 同士のISDN接続 * 構成と設定 INDY にISDNと PPP のソフトをインスト−ルしたとする。 INDY の左上のアイコンか ら [[検索]] をクリックし、見ていくと "isdnsetup" と "pppsetup" というアイコンが あるはずである。先ず "isdnsetup" でNTTを選び、 isdnd デ−モンを起動させておく。 次に "pppsetup" で PPP コマンドの設定をやっていくという手順になる。 ISDN発呼 する PPP コマンドは、ダイアルアップIP接続と同じものである。 以上の設定は別に手 作業でもできる。"pppsetup" では設定できることは限られている。 下記構成はイントラネットの "隣接ネットワ−クゾ−ン" にあたる。セキュリティのため 支社のホストも、1個のセグメントとし、IPアドレスをつけた。 hostA の PPP は設定 により、相手ホストのIPアドレスを動的につけることができる。しかしここでは接続で きるホストを明示するよう設定した。経路制御も静的にし、デフォルト経路設定は使わな いことにした。これは支社側でもインタ−ネットのダイアルアップIP接続ができるよう、 デフォルト経路をとっておくためでもある。 % route add net 192.9.200.0 192.9.201.1 1 ----- ----- | | | |����プロバイダへダイアルアップIP接続 ----- ----- デフォルト経路の設定はこっちで使用。 | | 支社 -------*---------*-------*---- 192.9.201 | ------- 192.9.201.1 isdnd |hostB| ------- TEL:0987654321 : :INS64 : ------- TEL:0123456789 isdnd |hostA| ------- 192.9.200.1 | 本社 -------*---------*-------*--- 192.9.200 | | ----- ----- | | | | ----- ----- % route add net 192.9.201.0 192.9.200.1 1 hostA /etc/ppp.conf hostB /etc/ppp.conf ----------------------------- ------------------------------ |ins64 send_username=katou | 空欄左に同じ | send_passwd=ossyaa | | remotehost=192.9.201.1 |192.9.200.1 | localhost=192.9.200.1 |192.9.201.1 | mindevs=1 | | outdevs=2 | | quiet << オンデマンド・ダイアリング |in << 受信専用にする場合。 | add_route="add 192.9.201.0 192.9.201.1 1" |"add 192.9.200.0 192.9.200.1 1" |# debug=1 | | | |_ISDN_INCOMING reconfigure |_ISDN_INCOMING reconfigure ↑ これは受信側で PAP, CHAP 制御に関係するみたい。 相手の /etc/passwd に send_username と send_passwd に記述したロッグイン名とパス ワ−ドが設定されていること。 hostA /etc/uucp/Systems ------------------------------------------------------------ |ins64 Any ISDN 38400 "" "" ISDNCALL[64]0987654321 CONNECTED hostB /etc/uucp/Systems ------------------------------------------------------------ |ins64 Any ISDN 38400 "" "" ISDNCALL[64]0123456789 CONNECTED /etc/uucp/Devices << 以下3つ hostB も同じく。 ---------------------------------- |# For PPP over ISDN |ISDN isdn/modem_b1 - 38400 direct |ISDN isdn/modem_b2 - 38400 direct /etc/config/isdnd.options /etc/config/isdnd -------------------------- ----------------- |-t NTT |on hostA% ppp -r ins64 & << root で起動すること。ppp.conf の ins64 という文字を指 定する。別に ins64 でなくても何でも構わない。 hostA% telnet hostB << 勝手に電話して接続する。 * 接続実験 INDY はISDNの TA を内臓しているので、直接NTTの INS64 回線に接続できる。マ シンの背面に電話マ−クの RJ45 コネクタの受け口がある。ここにプチっとモジュラ−ジ ャックを入れればよい。ISDN回線はエミュレ−タ INE-64II を使う。ちゃんと接続し て isdnd デ−モンが稼働していれば、INE-64II の L1, D に赤いランプがつく。 もしラ ンプがつかなければ、isdnd デ−モンを再起動してみること。% isdnd -t NTT とする。 ---------------------------------------------------------------- | LINE1 ○ ○ ○ ○ LINE | | ISDN L1 D B1 B2 1 2 | | INE-64II LINE2 ○ ○ ○ ○ □ □ | | | ---------------------------------------------------------------- 電話番号 LINE1 : 0987654321 LINE2 : 0123456789 -------------------------------------------------------------------------------- 接続テストの注意:念のために経路情報を初期化しておく。routedが動いていたら止めて、 route -f コマンドを実行しておく。経路制御で default 経路を設定すると、何かおかし い。dirview などロ−カルで使用するコマンドを実行すると、なぜかパケットがISDN の方に飛んでいってしまう。電話をかけてしまうのである。その間マシンはロックしたよ うな状態になり、何も入力を受け付けなくなる。だいぶたってから dirview 画面が戻る。 -------------------------------------------------------------------------------- [ debug=1 で hostB に ping したログ ] hostA % ppp -r ins64 ppp[1167]: ins64: given SEND_NAME or SEND_PASSWD, assume SEND_PAP SEND_CHAP ppp[1167]: ins64: debug=1 mode=quiet demand-dial mindevs=1,out=2,max=2 active_timeout=300,inactive=30 ppp[1167]: + route add 192.9.201.0 192.9.201.1 1 ppp[1167]: add net 192.9.201.0: gateway 192.9.201.1 -mtu 0 -sendpipe 0 -recvpipe 0 -ssthresh 0 -rtt 0 -rttvar 0 ppp[1167]: + killall -v -ALRM routed ppp[1167]: プロセス が見当たりません ppp[1167]: + killall -v -USR1 gated ppp[1167]: プロセス が見当たりません ppp[1186]: ins64: add a line << ping の開始。 ppp[1186]: ins64: starting to use /dev/isdn/modem_b1 ppp[1186]: ins64: pass device ppp[1167]: ins64 1: took /dev/isdn/modem_b1 from process 1186 ppp[1186]: ins64: killed by signal 15 ppp[1167]: ins64 LCP1: MTU=1500 MRU=1500 TOS PCOMP ACOMP ppp[1167]: ins64 LCP1: my magic=0x6907709e,his=0x69088757 sync ppp[1167]: ins64 IPCP1: ready 192.9.200.1 to 192.9.201.1, rx_vj_comp=y,tx=y rx_compslot=n,tx=n rx_slots=16,tx=16 ppp[1167]: ins64 CCP1: turn on/reset TX 12 bit BSD Compress ppp[1167]: ins64 CCP1: turn on/reset RX 12 bit BSD Compress ppp[1167]: ins64: /dev/isdn/modem_b1 activity timer expired << ping 終わり。 | | << ping を止め30秒ぐらいで回線が切れる。 ppp[1167]: ins64: /dev/isdn/modem_b1 activity timer expired ppp[1193]: ins64: received signal 2 << CTRL+C で強制終了させた。 ppp[1193]: + route delete 192.9.201.0 192.9.201.1 ppp[1193]: delete net 192.9.201.0: gateway 192.9.201.1 ppp[1193]: ins64: exiting with 2 [ ppp 稼働中の経路情報 ] hostA % netstat -rn Routing tables Destination Gateway Flags .. Use Interface 192.9.200 192.9.200.1 U 6770 ec0 192.9.201.1 192.9.200.1 UH 8 ppp0 192.9.201 192.9.201.1 UG 0 ppp0 * CHAP 制御とセキュリティ問題 多分これでいいのでないかと思う。PPP のデバッグモ−ドでログを画面に出すしか、確認 の方法がない。どういうログが出たら CHAP を使ったか分かる材料がないと、確信がもて ない。CHAP で暗号化されるのは、PPP接続する際のロッグイン名とパスワ−ドである。否 やみたいだと言っておこう。確認したわけではない。 接続してから telnet や ftp をか けると、その時のパスワ−ドやセッションの中身は平文のまま流れることになる。それに どうも暗号化というより、ハッシュ関数を使って、ダイジェストを作り、その比較で認証 しているようである。たとえ CHAP を使ったとしても、依然セキュリティはだいじょうぶ とは言えない。通常の PPP はただ接続するだけの機能しかもっていない。 INDY で使えるかは知らないが、パケットフィルタリング機能がついた PPP ソフトがある。 "Morning Star PPP"、ハッピ−サイズが日本では販売している。98,000円。あるいはファ イアウォ−ルの fwtk を使う手も考えられる。 hostA クライアント hostB サ−バ ------------------------------- ------------------------------- |ins64 send_username=katou << |ins64 remotehost=192.9.200.1 | remotehost=192.9.201.1 | localhost=192.9.201.1 | localhost=192.9.200.1 | mindevs=1 | mindevs=1 | outdevs=2 | outdevs=2 | in | quiet | add_route= 同じ | add_route= 同じ | send_chap << | recv_chap << | recv_username=katou << | debug=2 | | |_ISDN_INCOMING reconfigure << | send_username=katou << パスワ−ドはブランクにしておいて、使わないようにした。hostB は受信 専用にした。パラメ−タがどう関係したかできるだけ分かるようにした。 hostA% ppp -r ins64 ppp[2737]: ins64: given SEND_NAME or SEND_PASSWD, assume SEND_PAP SEND_CHAP | ppp[2746]: ins64: add a line ppp[2746]: Device Type ISDN wanted ppp[2746]: gdial(direct) called ppp[2746]: ins64 LCP: set sync,acomp=0,pcomp=0,rx_ACCM=0,tx=0,pad=0 ppp[2746]: ins64: starting to use /dev/isdn/modem_b1 ppp[2746]: ins64 LCP: action TLS ppp[2746]: ins64: entering Establish Phase ppp[2746]: ins64 LCP: send Configure-Request ID=0xde ppp[2746]: ins64 LCP: MRU=1505 ppp[2746]: ins64 LCP: receive CHAP challenges ppp[2746]: ins64 LCP: magic=0x6907709e | ppp[2746]: ins64 LCP: receive Configure-Request ID=0x8f ppp[2746]: ins64 LCP: accept MTU=1505 ppp[2746]: ins64 LCP: note PAP authentication ppp[2746]: ins64 LCP: peer's magic=0x69088757 | ppp[2746]: ins64 LCP: my magic=0x6907709e,his=0x69088757 sync ppp[2746]: ins64: entering Authenticate Phase ppp[2746]: ins64 AUTH: will send PAP requests but receive CHAP responses ppp[2746]: ins64 AUTH: send CHAP challenge ID=0x53, name "katou" ppp[2746]: ins64 AUTH: 'send_pap' specified but 'send_passwd' not specified-- 何となく CHAP 制御しているみたいだ!! assume null password ppp[2746]: ins64 AUTH: send PAP request ID=0x53 ppp[2746]: ins64: pass device ppp[2737]: ins64 1: took /dev/isdn/modem_b1 from process 2746 ppp[2737]: ins64 LCP1: set sync,acomp=0,pcomp=1,rx_ACCM=0,tx=0,pad=0 ppp[2737]: ins64 AUTH1: receive CHAP Response ID=0x53, name "katou" ppp[2737]: ins64 AUTH1: receive CHAP response for name "katou", but recv_passwd not specified; fail ppp[2737]: ins64 AUTH1: send CHAP Success with "howdy" ppp[2737]: ins64 AUTH1: receive PAP Ack ID=0x53 containing "howdy" ↑ howdy" これが出たらOKということだ。 * ISDNソフトのインスト−ル IRIX 5.3 OSの標準インスト−ルでは、ISDNのソフトは入らないので、 別に入れる 必要がある。それに UUCP のソフトもいれておいたほうが無難である。ともかくISDN 接続は、ダイアルアップIP接続と基本的には同じで、 isdnd デ−モン下で PPP を実行 するのである。それに IRIX 5.3 の PPP は PAP 対応のみで、 CHAP はサポ−トしてない CHAP サポ−トのパッチが 配布CD-ROM の "Desktop Special Edition 1.1" に入っている。 IRIX 6.2 では最初から CHAP サポ−トの PPP が入っている。 下記 %inst で CD-ROM を 認識しなかったら Inst> from /CDROM/dist とやってみること。 % inst | Inst> list *isdn* Current View: Location: distribution Status: N=new,U=upgrade,P=patch upgrd,S=same,D=downgrade,' '=not installed Selection: i=install, r=remove, k=keep Level: subsystem Name: name Subsystem Type(s) [bdrp]: b=reBoot needed, d=Default, r=Required, p=Patch N isdn_eoe.books.ISDN_UG 0 ISDN User's Guide N isdn_eoe.man.isdn 0 ISDN Execution Manual Pages N isdn_eoe.man.relnotes 0 ISDN Release Notes N isdn_eoe.sw.gifts 0 ISDN Application Developement Tools N isdn_eoe.sw.isdn 0 ISDN Execution Software Inst> inst isdn* Inst> go | Inst> q Building dynamic ELF inventory file for rqs(1) processing .. 100% Done. % CD-ROM "Desktop Special Edition 1.1" のパッチ。3つ入れておくこと。 NA patchSG0000517.eoe2_man.ppp [p] 0 Point-to-Point Protocol Man Pages NA patchSG0000517.eoe2_sw.ppp [p] 0 Point-to-Point Protocol Software NA patchSG0000841.isdn_eoe_sw.isdn [bp] 0 ISDN Execution Software (4) UUCP 古典接続 * UUCP とは [ その歴史 ] 公衆電話回線を通して2台のコンピュ−タ間で、ファイル転送したり、コマンドを実行す るための通信プロトコルであり、Unix to Unix CoPy の略である。現在のインタ−ネット のIP通信の前では、この UUCP プロトコルによって、NetNews や電子メ−ルをバケツ・ リレ−していた。 国内では JUNET という学術ネットワ−クが当時のインタ−ネットの実 態であり、完全にボランティアにより運営されていた。商用インタ−ネットが立ち上がる 1994年ぐらいまで UUCP によるインタ−ネット接続が行われていた。現在でもその名 残りでプロバイダの商品項目に UUCP を載せているところもある。JUNET 時代からインタ −ネットの有用性は認識していたが、何とも情報がなかった。大学に知り合いでもいて色 々教えてもらえるような状況でないとインタ−ネット接続は難しかった。 今でこそ UUPC なるパソコン用の UUCP ソフトがあったり、オライリ−から本も出ている。 当時はEWSでしかソフトはなく、かつ文献もほとんどなく、設定方法はまるで分からな かった。tip とか cu といった単純な通信コマンドを試したり、 Kermit をやってみたり、 みんな手探りで UUCP にチャレンジして行ったわけである。モデムも今のように種類はな かった。まだ 1200 ボ−、最高でも 9600 ボ−(bps) とかいう時代だった。EWS系で当 時、一斉風靡していたのは TELEBIT 社の Trail Blazer T2500 だった。 PEP という特殊 なプロトコルで最高 19200 bps 出た。モデムの限界速度だなと思ったもんである。 ここ では1993年頃 Apollo コンピュ−タ間で、UUCP 接続した時の設定を書いた。UUCP は インタ−ネットの基礎になった技術であり、どんなものだったか知っておくのは悪いこと ではない。いや真のエンジニアたろうとするなら歴史は知るべきであろう。 [ 基本的な仕組み ] ・通信方法はリアルタイムではなく、バッチ式に近いものである。UUCP ネットワ−クと言 った言葉もあるが、ただのファイル転送プログラムぐらいに考えた方がよい。 実際のフ ァイル転送の手順を以下に示す。 それぞれのコンピュ−タで、相手に送りたいファイル名をスプ−ルしておく。 ↓ 適当な時にどちらかからファイル転送プログラムを起動する。 ↓ プログラムを起動した側の、スプ−ルされたファイルを相手に転送する。 ↓ 今度は逆に相手側のファイルを、プログラムを起動した側に転送する。 ・雑誌等によって UUCP ノ−ドの役割名称を色々に言っている。UUCP のファイル転送プロ グラム(最終的には uucico)を起動する側のノ−ドをロ−カルと呼ぶ。また UUCP にお けるノ−ドのことをサイトとも表現する。本節では、ロ−カルとリモ−トと以下呼ぶ。 ロ−カル側:マスタ−、caller とも呼ばれる。 リモ−ト側:スレ−ブ、answer とも呼ばれる。 ・UUCP に限らず通信ソフトの特徴として、必ずしも通信がうまく行くわけでないと言うこ とを念頭に置く必要がある。つまり電話回線はノイズが入ったりして、 電話がつながら なかったりする場合がある。 このため UUCP の設定では、できるだけ安定して通信でき るようにと制御ファイルの記述に苦労することになる。 ・Apollo コンピュ−タでは一方からしか、ファイル転送プログラムを起動することができ ない。Sun では双方向にできるらしいが、UUCP は一方向が基本となっている。 * UUCP リンクの手順 1) 電話回線とモデムを2組用意し、RS-232C ストレ−ト・ケ−ブルで接続する。 電話回線の適用回線(2、4線式)に合ったモデムを用意すること。 2) ロ−カルとリモ−ト用のモデムの設定を行なう。 電話をかける方がロ−カル、受ける方がリモ−トで設定が異なる。 3) コンピュ−タとモデム間のシリアル回線、RS-232C の設定を行なう。 4) リモ−ト側で getty デ−モンを起動させる。 ロ−カルからシリアル回線を通してロッグインできるようにする。 5) ロ−カルとリモ−トのノ−ドでホスト名を登録する。小文字にしておいた方がいい。 6) ロ−カルとリモ−ト用の UUCP 制御ファイルを設定する。 ロ−カル側 : Systems, Permissions, Dialers, Devices リモ−ト側 : Systems, Permissions 7) uucico コマンドにデバック・オプションを付けて、ともかく相手ノ−ドと接続するか どうかテストする。-x9 がデバック・オプションで最大。x5 ぐらいでもよい。 $ /usr/lib.uucp/uucico -r1 -sdomain2 -x9 8) 各種 UUCP 制御ファイルの変な文字列をいろいろ変えて、接続を安定させる。 Systems ファイルのロッグイン部分等がネックである。Dialers ファイルもやらしい。 9) 転送先ディレクトリのパ−ミッションを設定する。 $ acl /nix/uucp /usr/spool/uucppublic でアクルをコピ−する。 10) uucp コマンドで、送りたいファイル名をスプ−ルし、uucico で転送してみる。 $ /usr/bin/uucp -r /nix/test/file domain2!/nix/uucp/file 11) リモ−ト側からも uucp コマンドで、送りたいファイル名をスプ−ルしてみる。 ロ−カルの uucico の起動によってファイル転送されるか確認する。 12) uucp コマンドの -f, -C オプションにより、正確にファイル転送できるようにする。 $ /usr/bin/uucp -f -r /nix/test/file domain2!/nix/uucp/file 13) クロ−ンによる自動運転の設定を行なう。これでやっと設定完了。時間を決めて UUCP が使用するディレクトリにゴミが出来ていないかチェックする。 * UUCP リンクの実際 [ 条件 ] Apollo コンピュ−タを2台、内線で UUCP 接続してみる。OSは SR10.4.0、UNIXは BSD4.3 である。 モデムは Trail Blazer T2500 を使い、19200 bps、UUCP "g" プロトコ ル、PEP モ−ド接続とする。PEP は T2500 のデフォルトのモ−ドになっている。 モデム の前面にボタンが付いているが、何もいじらなくてもよい。 回線は RTS/CTS フロ−制御、 デ−タビット8、偶数パリティとし、tty 回線を使用する。RTS/CTS 制御はバイナリ・デ −タが転送できるようにするためである。これらパリティなどのパラメ−タは、双方同じ にすれば何でも構わないということ。 ----------- ----------- ロ−カル側 | domain1 | | domain2 | リモ−ト側 ----------- ----------- |/dev/tty01 |/dev/tty01 | | ストレ−ト・ケ−ブル ----- ----- モデム | |------//------| | 内線電話は 312 番とする ----- ----- T2500 補足説明。マニュアルにはコマンドモ−ドの設定についてごちゃごちゃ書いてあっ て非常に分かりずらい。モ−ドには、拡張コマンドモ−ドの非同期、SDLC、V.32。ヘイズ 互換コマンドモ−ドの非同期の4種類がある。それに T2500 の前面 A,B 切り替えボタン については、ボタンを押し込んだ状態が B であり、 このボタンはコマンドモ−ドを2通 り記憶する働きがある。工場出荷時の T2500 は A,B とも拡張コマンドモ−ド(非同期) に設定されている。結局デフォルトのままでいいということである。 [ ロ−カル側の設定 ] $ /etc/hostname domain1 << アカウント uucp、パスワ−ド apollo とする。 /usr/lib.uucp/Systems << 電話して login と passwd のやりとりをする。 domain2 Any ACU 19200 312 "" P_ZERO "" \r\c IN:--IN: uucp WORD: apollo 注.IN は LOGIN、WORD は PASSWORD 文字列の後ろの一部である。そのまま記載して も接続手順でとりこぼして認識しない。GIN ぐらいでほぼ接続する。\r\c を \r にすると接続しない場合がある。次の Dialers もこのような感じで設定する。 /usr/lib.uucp/Dialers << AT コマンドで相手モデムとやりとりする。 telebit =,-, "" AT OK-AT A\pT\pS50=255\r\c OK\r A\pT\pS7=58\r\c OK\r 前から続く A\pT\pDP\T\r CONNECT\sFAST /usr/lib.uucp/Devices << 仮想端末 tty01 で 19200 bps 接続する。 ACU tty01 - 19200 telebit \D /usr/lib.uucp/Permissions LOGNAME=uucp MACHINE=domain2 READ=/ WRITE=/ REQUEST=yes SENDFILES=yes 前から続く COMMANDS=ALL /etc/ttys console "/etc/dm_or_spm" apollo on secure << ブランクは タブであることに注 display none apollo off secure 意せよ。ttys ファイルを変更し tty01 none dumb on secure たら、$ kill -HUP 1 とやる。 $ tctl -tty 1 -default -speed 19200 -rts_enable -cts_enable -parity none -bpc 8 モデムのレジスタ設定の入力コマンド。下に主要レジスタの設定値の意味を記す。 at &f s51=254 s52=2 s54=3 s55=3 s58=2 s64=1 at s68=2 s111=30 s130=2 s131=2 s61=0 q4 e0 &F モデムのレジスタ値を拡張コマンドの工場出荷状態にする。 S61=0 モデム内臓スピ−カ−・ボリュ−ムをオフにする。 S58=2,S68=2 モデムとコンピュ−タ間のデ−タを RTS/CTS 制御にする。 S111=30 UUCP "g" プロトコルをセットする。(ロ−カル側モデム) S111=255 相手モデムにセットされたのプロトコルを使用する。 E0 エコ−オフにする。 [ リモ−ト側の設定 ] $ /etc/hostname domain2 << アカウント uucp、パスワ−ド apollo とする。Apollo コンピュ−タでは、アカウントの登録は $ /etc/edrgy /usr/lib.uucp/Systems コマンドで行う。ホスト名は $ uuname -l でも確認で domain1 Never Slave きる。 /usr/lib.uucp/Dialers, Devices は何も設定しない。全部 # でコメントにする。 /usr/lib.uucp/Permissions << MACHINE=domain1 にする。他はロ−カルに同じ。 /etc/ttys console "/etc/dm_or_spm" apollo on secure display none apollo off secure tty01 "/etc/getty std.19200" dumb on secure 注.std.19200 というのは /etc/gettytab ファイルに書かれていなければならない。 $ pst Apollo のプロセスを見たところ。 ------------------------------------------------------------ Processor | PRIORITY | Program | State | Process Name Time (sec)| mn/cu/mx | Counter | | ------------------------------------------------------------ 6.808 16/16/16 76089012 Wait init 149.595 3/14/14 76088ED4 Wait glbd 61.081 3/14/14 76088ED4 Wait llbd 13.083 3/14/14 76088ED4 Wait xapollo 4.524 3/14/14 76088ED4 Wait server_process_manager 50.462 3/14/14 76088918 Wait netman 457.049 16/16/16 76088ED4 Wait display_manager 0.849 3/14/14 76088918 Wait mbx_helper 0.044 3/14/14 76088ED4 Wait uid = 55FE7933.A0022257 (getty) $ tctl -tty 1 -default -speed 19200 -rts_enable -cts_enable -parity none -bpc 8 モデムのレジスタ設定の入力コマンド。ロ−カル側とは S111=255 のみ異なる。 * UUCP の運転 uudemon.hour がファイル転送実行プログラムで、 午前10時、12時、3時とその7分 後にファイル転送するようにした例である。このデ−モンは UUCP のロ−カル・サイトで のみ設定する。7分後にもう一度起動するのは、最初の起動で失敗した場合の予備である。 uudemon.admin はファイル転送実行に先立ちジョブを整理する。uudemon.cleanup はログ ファイルの整理で、夕方5時から毎日行なうようにしてある。 /sys/node_data/cron/crontab << ロ−カル側 /bsd4.3/usr/lib/crontab から --------------------------------------------------------------- のリンク |0,7 10,12,15 * * * root /usr/lib.uucp/uudemon.hour > /dev/null |55 9,11,14 * * * root /usr/lib.uucp/uudemon.admin > /dev/null |0 17 * * * root /usr/lib.uucp/uudemon.cleanup > /dev/null 2>&1 /sys/node_data/cron/crontab << リモ−ト側 --------------------------------------------------------------- |55 9,11,14 * * * root /usr/lib.uucp/uudemon.admin > /dev/null |0 17 * * * root /usr/lib.uucp/uudemon.cleanup > /dev/null 2>&1 $ ld /sys/node_data/cron .proto README at at.deny atjobs cron.deny crontab crontabs queuedefs 転送ファイルをある決まったディレクトリに入れるようにすれば、ある日数以上経ったフ ァイルを自動的に消去することができる。 次の例は /nix/uucp 以下のディレクトリの中 の14日以上経ったファイルを見つけ出し、消去するものである。 /sys/node_data/etc/rc.user --------------------------------------------------------- |/bin/sh -c 'find /nix/uucp/?* -mtime +13 -exec rm {} \;' << ボ−ン・シェル UUCP ロックファイルをする。ロ−カル側、リモ−ト側共設定する。/etc/daemons/uucico ファイルを作成し、rc 制御ファイルのコメントを外しておくこと。 /sys/node_data/etc/rc --------------------------------------- |if [ -f /etc/daemons/uucico ]; then | cd /usr/spool | if [ -f /bin/rm ]; then | rm -f uucp/LCK.* | rm -f locks/LCK.* (5) UUCP 設定のポイントなど * UUCP テスト時のノウハウ ・通常 uucico コマンドが失敗して、すぐ uucico を再度実行しようとすると、何のメッセ −ジもなく終わってしまう。.Status ファイルを消去してやるとよい。 $ /usr/lib.uucp/uucico -r1 -sdomain2 -x5 << これが失敗した。 $ dlf /usr/spool/uucp/.Status/domain2 << このファイルを消去する。 ・ロ−カルでたまっているジョブを削除する $ uustat -a domain2N7575 07/10-14:02 S domain2 root 122 /nix/test/file $ uustat -kdomain2N7575 << ジョブを殺す。 Job: domain2N7575 successfully killed ・UUCP 作業用ディレクトリ、ファイルを整理する $ uudemon.cleanup /usr/spool/uucp/[A-z]* not found << これは、これでOK。 find: bad status < /usr/spool/uucppublic/* > uudemon.cleanup: tail: not found JOBはキャンセルしない。 uudemon.cleanup: tail: not found ・ファイル転送速度 転送速度はファイル転送の後 xferstats ファイルに記述される。ただしuudemon.cleanup を行なうと消える。以下は 932356 bytes のバイナリ・デ−タを、696.183 秒かかって転 送したログである。転送レ−トは 1339.2 bytes/sec (約10.7 Kbits/sec)である。 /usr/spool/uucp/.Admin/xferstats --------------------------------------------------------------------------- |GD!root M (8/18-17:40:35) (C,2011,1) [tty01] -> 932356 / 696.183 = 1339.2 ・uusched コマンド 複数のホストにファイル転送要求がある場合、 uucico コマンドに宛先を自動的に付加し て実行する。このコマンドは uudemon.hour の中にあって実行される。 /usr/lib.uucp/uudemon.hour --------------------------- |/usr/lib/uucp/uusched & << これはファイル転送。 |/usr/lib/uucp/uuxqt & << こっちはコマンド転送。 送りたいファイルをスプ−ルする。 $ /usr/bin/uucp -f -C -r /nix/uucp/sss domain3!/nix/uucp/IC.sss $ /usr/bin/uucp -f -C -r /nix/uucp/kkk domain2!/nix/uucp/IC.kkk 転送命令を出す $ /usr/lib.uucp/uusched -u5 << u5 は uucico の -x5 と同じ結果になる。 これは次の命令を出したのと同じことになる。 $ /usr/lib.uucp/uucico -r1 -sdomain2 -x5 $ /usr/lib.uucp/uucico -r1 -sdomain3 -x5 ・uudemon.hour コマンド 転送ファイルの登録がない場合、uudemon.hour を実行しても uucico等のデ−モンは起動 されない。登録がある場合は、ただちにロックファイルが作成される。 uucico, uusched が起動し、終了と同時にロックファイルも消える。 $ ld /sys/node_data/locks LCK..gg1 LCK..tty01 LCK.S.0 もし転送に失敗すると、その後 uudemon.hour コマンドを発行しても、しばらく無反応に なってしまう。転送先のホスト名が gg1 であれば次のファイルが作成される。 $ catf /usr/spool/uucp/.Status/gg1 21 2 714386869 600 CALLER SCRIPT FAILED gg1 このファイルは転送に成功した場合も作成されるが、失敗の記述がなされると、ともかく uudemon.hour が終了してから約5分間は uudemon.hour を起動できない。 この場合直ち に起動したい場合は、ステ−タス・ファイルを消去してやればよい。 * ファイル転送チェック ・相手ノ−ドの存在しないディレクトリにファイルを送った場合 > パ−ミッションが許されるならば、ディレクトリを作成してファイルを送る。 ・相手側のモデムのスイッチが入っていなかった場合 > uucico -r1 ... を再度実行するとファイルを送る。 ・相手側のモデムは入っていて、ホストの電源が入っていなかった場合 > uucico -r1 ... を再度実行するとファイルを送る。(モデムと接続できない) ・-f オプションを付けた場合 $ /usr/bin/uucp -f -r /nix/test/file domain2!//nanasi/file > -f を付けると、存在しないディレクトリには、ファイルを送れなくできる。 ・-C オプションを付けた場合 $ /usr/bin/uucp -C -r /nix/test/file domain2!/nix/uucp/file > -C を付けると、送るファイルをスプ−ル・ディレクトリにコピ−して作業する。 ・-m オプションを付けた場合 $ /usr/bin/uucp -m -r /nix/test/file domain2!/nix/uucp/file > -m を付けるとファイル転送が成功したかどうか電子メ−ルを出す。